Day 3: 연산자와 형변환
연산자는 데이터를 가공하는 기호입니다. Java는 산술, 비교, 논리, 대입, 비트 연산자 등 다양한 연산자를 제공합니다. 또한 서로 다른 자료형 사이의 변환(형변환)을 이해하는 것이 중요합니다.
산술 연산자와 대입 연산자
기본적인 수학 연산과 복합 대입 연산자를 알아봅니다.
public class ArithmeticOperator {
public static void main(String[] args) {
int a = 17;
int b = 5;
System.out.println("덧셈: " + (a + b)); // 22
System.out.println("뺄셈: " + (a - b)); // 12
System.out.println("곱셈: " + (a * b)); // 85
System.out.println("나눗셈: " + (a / b)); // 3 (정수 나눗셈)
System.out.println("나머지: " + (a % b)); // 2
// 복합 대입 연산자
int score = 100;
score += 10; // score = score + 10 -> 110
score -= 20; // score = score - 20 -> 90
score *= 2; // score = score * 2 -> 180
score /= 3; // score = score / 3 -> 60
System.out.println("최종 점수: " + score);
// 증감 연산자
int count = 5;
System.out.println(count++); // 5 (후위: 출력 후 증가)
System.out.println(count); // 6
System.out.println(++count); // 7 (전위: 증가 후 출력)
}
}
비교 연산자와 논리 연산자
조건을 판단할 때 사용하는 연산자들입니다.
public class ComparisonLogicalOperator {
public static void main(String[] args) {
int x = 10;
int y = 20;
// 비교 연산자 (결과: boolean)
System.out.println(x == y); // false
System.out.println(x != y); // true
System.out.println(x > y); // false
System.out.println(x < y); // true
System.out.println(x >= 10); // true
System.out.println(x <= 5); // false
// 논리 연산자
boolean isAdult = true;
boolean hasMoney = false;
System.out.println(isAdult && hasMoney); // false (AND: 둘 다 true여야)
System.out.println(isAdult || hasMoney); // true (OR: 하나만 true여도)
System.out.println(!isAdult); // false (NOT: 반전)
// 삼항 연산자
int age = 17;
String status = (age >= 18) ? "성인" : "미성년자";
System.out.println(status); // "미성년자"
}
}
자동 형변환 (묵시적 변환)
작은 자료형에서 큰 자료형으로 변환할 때 자동으로 이루어집니다. 데이터 손실이 없습니다.
public class AutoCasting {
public static void main(String[] args) {
// 자동 형변환: byte -> short -> int -> long -> float -> double
byte byteVal = 10;
int intVal = byteVal; // byte -> int (자동)
long longVal = intVal; // int -> long (자동)
double doubleVal = longVal; // long -> double (자동)
System.out.println("byte -> int: " + intVal);
System.out.println("int -> long: " + longVal);
System.out.println("long -> double: " + doubleVal);
// 연산 시 자동 형변환
int num = 10;
double result = num / 4.0; // int가 double로 자동 변환
System.out.println("10 / 4.0 = " + result); // 2.5
// 주의: 정수끼리 나누면 정수
System.out.println("10 / 4 = " + (10 / 4)); // 2 (소수점 버림)
}
}
강제 형변환 (명시적 변환)
큰 자료형에서 작은 자료형으로 변환할 때는 캐스팅 연산자를 사용해야 합니다.
public class ExplicitCasting {
public static void main(String[] args) {
// 강제 형변환: 데이터 손실 가능!
double pi = 3.14159;
int intPi = (int) pi; // 소수점 버림
System.out.println("double -> int: " + intPi); // 3
long bigNumber = 300;
byte smallByte = (byte) bigNumber; // 범위 초과 시 데이터 손실
System.out.println("long -> byte: " + smallByte); // 44 (오버플로우)
// 문자열 <-> 숫자 변환
String numStr = "123";
int parsed = Integer.parseInt(numStr); // String -> int
double parsedD = Double.parseDouble("3.14"); // String -> double
String back = String.valueOf(parsed); // int -> String
String back2 = "" + parsed; // int -> String (간편)
System.out.println("파싱: " + parsed);
System.out.println("문자열: " + back);
// char와 int 변환
char ch = 'A';
int ascii = ch; // 65
char fromInt = (char) 66; // 'B'
System.out.println("A의 ASCII: " + ascii);
System.out.println("66의 문자: " + fromInt);
}
}
오늘의 연습문제
-
온도 변환기: 섭씨 온도(double)를 입력받아 화씨로 변환하는 프로그램을 작성하세요. 공식:
화씨 = 섭씨 * 9.0 / 5.0 + 32. 정수 나눗셈 함정을 피하세요. -
짝수 홀수 판별: 정수 변수를 선언하고 삼항 연산자를 사용하여 짝수인지 홀수인지 판별하는 프로그램을 작성하세요. (
%연산자 활용) -
오버플로우 실험:
Integer.MAX_VALUE에 1을 더하면 어떤 값이 되는지 출력해보세요.byte타입에 200을 캐스팅하면 어떤 값이 되는지 확인하고, 왜 그런 결과가 나오는지 주석으로 설명하세요.